package com.kfm.base.string;

public class Exer04 {

    public static void main(String[] args) {
        /*
            最长公共前缀
         */
        String[] arr = {"hello", "her", "hete", "h"};
        String length = maxPublicPreLength1(arr);
        System.out.println(length);
    }

    public static String maxPublicPreLength1(String[] arr) {
        // 公共前缀
        StringBuilder max = new StringBuilder(arr[0]);

        int i = 0; // 删除元素的个数
        int index = 1; // 数组元素

        while(index < arr.length){
            int s = Math.min(max.length(), arr[index].length());
            String pre = max.toString();
            if (pre.equals(arr[index].substring(0, s))) {
                index ++;
                continue;
            } else {
                if (i != arr[0].length() - 1){
                    max.deleteCharAt(arr[0].length() - 1 - i);
                    i ++;
                    continue;
                }else {
                    return "";
                }
            }
        }
        return max.toString();
    }

    private static String maxPublicPreLength(String[] arr) {
        // 最短元素长度
//        int minIndex = 0;
//        for (int i = 1; i < arr.length; i++) {
//            if (arr[i].length() < arr[minIndex].length()) {
//                minIndex = i;
//            }
//        }

        // 假设这个最短元素就是最长公共前缀
        String min = arr[0];

        // 有几位就循环几次
        count:
        for (int i = 0, j = 1; i < arr[0].length(); i++) {
            // 循环遍历，每一个元素是不是都是以这个元素开头的
            for ( ; j < arr.length; j++) {
                if (!arr[j].startsWith(min)) {
                    // 如果不是，减一个字符
                    min = min.substring(0, min.length() - 1);
                    continue count;
                }
            }
            break;
        }

        return min;
    }
}
